home *** CD-ROM | disk | FTP | other *** search
- #include <errno.h>
- #include <fcntl.h>
- #include <newt.h>
- #include <string.h>
- #include <unistd.h>
-
- #include "fs.h"
- #include "install.h"
- #include "kernel.h"
- #include "log.h"
- #include "windows.h"
-
- static int copyFile(char * sourceName, char * destName) {
- int source, dest, i;
- char buf[16384];
- int olderrno;
-
- logMessage("coping %s to %s\n", sourceName, destName);
-
- source = open(sourceName, O_RDONLY);
- if (source < 0) {
- logMessage("file %s missing from source directory",
- sourceName);
- messageWindow("Error", "file %s missing from source directory",
- sourceName);
- return INST_ERROR;
- }
-
- dest = creat(destName, 0644);
- if (dest < 0) {
- logMessage("failed to create file %s", destName);
- messageWindow("Error", "failed to create file %s", destName);
- close(source);
- return INST_ERROR;
- }
-
- while ((i = read(source, buf, sizeof(buf))) > 0) {
- if (write(dest, buf, i) != i) {
- olderrno = errno;
-
- logMessage("error writing to file %s: %s",
- destName, strerror(olderrno));
- messageWindow("Error", "error writing to file %s: %s",
- destName, strerror(olderrno));
-
- close(source);
- close(dest);
- unlink(destName);
- return 1;
- }
- }
-
- if (i < 0) {
- olderrno = errno;
-
- logMessage("error reading from file %s: %s", sourceName,
- strerror(olderrno));
- messageWindow("Error", "error reading from file %s: %s", sourceName,
- strerror(olderrno));
- }
-
- close(source);
- close(dest);
-
- if (i < 0)
- return 1;
-
- return 0;
- }
-
- int kernelCopy(char * filename) {
- int rc = 0;
-
- if (!filename) {
- messageWindow("Kernel", "Please insert your boot disk in your first "
- "disk drive if it's not already present.");
- if (doMount("fd0", "/tmp/bootdisk", "ext2", 1, 0))
- return INST_ERROR;
-
- winStatus(34, 3, "Kernel", "Copying kernel from floppy...");
- rc = copyFile("/tmp/bootdisk/vmlinux.gz", "/mnt/vmlinux.gz");
- sync();
- newtPopWindow();
- } else {
- winStatus(34, 3, "Kernel", "Copying kernel from floppy...");
- rc = copyFile(filename, "/mnt/vmlinux.gz");
- sync();
- newtPopWindow();
- }
-
- return rc;
- }
-